home *** CD-ROM | disk | FTP | other *** search
/ Scene 96 / Scene 96 International Edition (Zyklop Software) (Disc 2) (1997).iso / misc / coding / pump_src / setup / devices.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1994-08-24  |  3.1 KB  |  129 lines

  1. {$A+,B-,D+,E-,F-,G+,I-,L+,N-,O-,R-,S-,V-,X+}
  2. UNIT Devices;
  3.  
  4.    (* Copyright by Jare/Iguana in 1993, but given to the public domain. *)
  5.    (* Want more comments? Write'em!                                     *)
  6.  
  7.    (*    Sound device detection and configuration file various.         *)
  8.  
  9. INTERFACE
  10.  
  11. TYPE
  12.    TDevices = (S_SB16ASP, M_SB16ASP, S_SBPRO, M_SBPRO, SB,
  13.                GUS,
  14.                PAS,
  15.                NONE,
  16.                DEV_INVALID);   (* == No idea of the configuration. *)
  17.  
  18.    TCfg = RECORD
  19.       SoundDevice : TDevices;
  20.       ReplayRate  : WORD;
  21.       Port        : WORD;
  22.       IRQ         : WORD;
  23.       DMA         : WORD;
  24.       visco       : WORD;
  25.    END;
  26.  
  27.  
  28. PROCEDURE DetectSoundEnvironment(VAR cfg : TCfg);
  29.  
  30.  
  31.    (* ========================================= *)
  32.  
  33. IMPLEMENTATION
  34.  
  35. USES Dos;
  36.  
  37. PROCEDURE DetectSoundEnvironment(VAR cfg : TCfg);
  38.   VAR
  39.      v : STRING;
  40.      i : INTEGER;
  41.  
  42.   PROCEDURE DoUltraSnd;
  43.     BEGIN
  44.        cfg.SoundDevice := GUS;
  45.        i := 1;
  46.        cfg.Port := 0;
  47.        cfg.IRQ  := 0;
  48.        WHILE (i <= Length(v)) AND (v[i] <> ',') DO BEGIN
  49.           cfg.Port := cfg.Port*16 + ORD(v[i]) - ORD('0');
  50.           INC(i)
  51.        END;
  52.        IF i < Length(v) THEN
  53.           INC(i);
  54.  
  55.        WHILE (i <= Length(v)) AND (v[i] <> ',') DO BEGIN
  56.           cfg.DMA := cfg.DMA*10 + ORD(v[i]) - ORD('0');
  57.           INC(i)
  58.        END;
  59.        IF i < Length(v) THEN
  60.           INC(i);
  61.  
  62.        WHILE (i <= Length(v)) AND (v[i] <> ',') DO
  63.           INC(i);
  64.        IF i < Length(v) THEN
  65.           INC(i);
  66.  
  67.        WHILE (i <= Length(v)) AND (v[i] <> ',') DO BEGIN
  68.           cfg.IRQ := cfg.IRQ*10 + ORD(v[i]) - ORD('0');
  69.           INC(i)
  70.        END;
  71.     END;
  72.  
  73.   PROCEDURE DoSBlaster;
  74.     VAR
  75.       p     : ^WORD;
  76.       dummy : WORD;
  77.       base  : WORD;
  78.     BEGIN
  79.        cfg.SoundDevice := SB;
  80.        i := 1;
  81.        cfg.Port := 0;
  82.        cfg.IRQ  := 0;
  83.        cfg.DMA  := 0;
  84.        WHILE (i <= Length(v)) DO BEGIN
  85.           CASE v[i] OF
  86.              'A' : BEGIN
  87.                       p := @cfg.Port;
  88.                       base := 16
  89.                    END;
  90.              'D' : BEGIN
  91.                       p := @cfg.DMA;
  92.                       base := 10
  93.                    END;
  94.              'I' : BEGIN
  95.                       p := @cfg.IRQ;
  96.                       base := 10
  97.              END ELSE BEGIN
  98.                 p := @dummy;
  99.                 base := 0
  100.              END
  101.           END;
  102.           INC(i);
  103.           WHILE (i <= Length(v)) AND (v[i] <> ' ') DO BEGIN
  104.              p^ := p^*base + ORD(v[i]) - ORD('0');
  105.              INC(i)
  106.           END;
  107.           IF i < Length(v) THEN
  108.             INC(i)
  109.        END
  110.     END;
  111.  
  112.   BEGIN
  113.     v := GetEnv('ULTRASND');
  114.     IF (v <> '') AND (cfg.SoundDevice IN [GUS, DEV_INVALID]) THEN
  115.        DoUltraSnd
  116.     ELSE BEGIN
  117.        v := GetEnv('BLASTER');
  118.        IF (v <> '') AND NOT (cfg.SoundDevice IN [GUS, NONE]) THEN
  119.           DoSBlaster
  120.        ELSE BEGIN
  121.           cfg.IRQ  := 4;
  122.           cfg.DMA  := 1;
  123.           cfg.Port := $3F8
  124.        END
  125.     END
  126.   END;
  127.  
  128. END.
  129.